package com.qlm.controller;

import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.List;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.jfinal.aop.Before;
import com.jfinal.core.Controller;
import com.jfinal.upload.UploadFile;
import com.qlm.common.Define;
import com.qlm.entity.Gift;
import com.qlm.interceptor.AdminOperateInterceptor;
import com.qlm.interceptor.AuthInterceptor;
import com.qlm.service.IGiftService;
import com.qlm.service.impl.GiftServiceImpl;
import com.qlm.tools.Common;
import com.qlm.tools.QiniuUtil;
import com.qlm.view.ResultMessage;

/**
 * 积分礼品管理
 * 
 * @author raoy
 *
 */
@Before({AuthInterceptor.class})
public class GiftManageController extends Controller {
	protected final static Logger logger = LoggerFactory
			.getLogger(GiftManageController.class);
	private IGiftService giftService = new GiftServiceImpl();

	/**
	 * 跳转积分礼品配置列表页面
	 */
	public void listGift() {
		// 获取所有积分礼品配置信息
		List<Gift> giftList = giftService.getGiftInfoList();
		logger.info("method:listGift return:giftList("
				+ giftList.toString() + ")");
		//传递参数
		setAttr("giftList", giftList);
		render("/page/giftList.jsp");
	}

	/**
	 * 跳转积分礼品新增页面
	 */
	public void giftAddSkip() {
		setAttr("today", new SimpleDateFormat("YYYY-MM-dd").format(Common.nowDate()));
		render("/page/addGift.jsp");
	}

	/**
	 * 保存积分礼品配置信息，并将图片上传到七牛云服务器。
	 * 
	 * jfianl框架上传文件注意事项：
	 * 1.jfinal2.0及其之前的框架，上传文件必须导入COS的jar包 
	 * maven地址如下： 
	 * <dependency>
	 * 		<groupId>com.jfinal</groupId> 
	 * 		<artifactId>cos</artifactId>
	 * 		<version>26Dec2008</version> 
	 * </dependency>
	 * 2.如果提交的form中既含有参数，又包含上传文件时，注意：获取文件的方法必须写在获取参数的方法之前，
	 * 不然任何参数都获取不到 
	 * 示例： 
	 * UploadFile imgFile = getFile("fileImage"); 
	 * Gift giftInfo = getModel(Gift.class);
	 */
	public void giftAdd() {
		/*
		 * getFile系列的方法，如果saveDirectory 参数以 "/" 或者以 "x:"
		 * 打头的话就会将文件保存为磁盘系统的绝对路径，否则会保存到项目中的 upload 下面。如需修改路径，可以在
		 * YourJFinalConfig.configConstant(Constants me)方法中使用：
		 * me.setUploadedFileSaveDirectory(String)改变默认的文件保存基路径。
		 */		
		//获取参数
		UploadFile imgFile = getFile("fileImage");
		UploadFile details_img = getFile("details_img");
		ResultMessage resultMessage = new ResultMessage();
		Gift giftInfo = new Gift();
		giftInfo.set("name_", getPara("gift_name"));
		giftInfo.set("price_", getPara("cost"));
		giftInfo.set("desc_", getPara("gift_describe"));
		logger.info("method:giftAdd param:giftInfo(" + giftInfo + ")");
		//新增信息
		resultMessage = giftService.saveGiftInfo(giftInfo, imgFile,details_img);		
		logger.info("method:giftAdd return:resultMessage(" + resultMessage + ")");
		renderJson(resultMessage);
	}

	/**
	 * 删除积分礼品配置信息
	 */
	public void giftDel() {
		//获取参数
		String id = getPara("id");
		logger.info("method:giftDel param:ID(" + id + ")");
		// 删除积分礼品配置信息
		ResultMessage resultMessage = giftService.deleteGiftInfo(id);		
		logger.info("method:giftDel return:resultMessage(" + resultMessage + ")");			
		renderJson("msg",resultMessage);
	}
	
	 /**
	 * 根据主键ID跳转积分礼品页面
	 */
	 public void giftUpdSkip() {
		//获取参数
		 String id = getPara("id");
		 logger.info("method:giftUpdSkip param:ID("+id+")");		
		 //根据主键ID查询相关积分礼品配置信息
		 Gift giftInfo = giftService.getGiftInfoById(id);
		 logger.info("method:giftUpdSkip return:giftInfo("+giftInfo+")");		
		 renderJson("giftInfo",giftInfo);
	 }

	/**
	 * 更新积分礼品配置信息
	 */
	public void giftUpd() {
		// 获取更新信息
		UploadFile imgFile = getFile("details_img");
		String details_img_ = getPara("details_img_");
		ResultMessage resultMessage = new ResultMessage();
		Gift giftInfo = new Gift();			
		giftInfo.set("id", getPara("id"));		
		giftInfo.set("name_", getPara("gift_name"));
		giftInfo.set("price_", getPara("cost"));
		giftInfo.set("desc_", getPara("gift_describe"));
		giftInfo.set("online_", 0);
		logger.info("method:giftUpd param:gift(" + giftInfo + ")");
		// 更新积分礼品配置信息
		resultMessage = giftService.updateGiftInfo(giftInfo,details_img_,imgFile);		
		logger.info("method:giftUpd return:resultMessage("+resultMessage+")");		
		renderJson("msg",resultMessage);
	}

	/**
	 * 更新积分礼品图片信息
	 */
	public void giftImgUpd() {		
		//获取参数
		UploadFile imgFile = getFile("fileImage");
		String ID = getPara("id");
		logger.info("method:giftImgUpd param:ID(" + ID + ")");
		// 上传图片到七牛云，并更新图片名称
		ResultMessage resultMessage = giftService.updateImgById(ID, imgFile);		
		logger.info("method:giftImgUpd return:resultMessage(" + resultMessage	+ ")");		
		//注意：这里使用ajaxfileupload.js上传，必须写成以下json传值格式才能被辨认。
		renderJson(resultMessage);
	}

	/**
	 * 修改积分礼品状态
	 */
	public void onlineStatus(){		
		//获取参数
		String ID = getPara("id");
		String statusStr = getPara("status");
		ResultMessage resultMessage = new ResultMessage();
		if(statusStr == null){
			resultMessage = ResultMessage.setAllMessage(Define.RM_FAIL, "状态码不能为空，请联系网站管理员");
		}else{
			int status = getParaToInt("status");		
			logger.info("method:onlineStatus params:ID(" + ID + "),is_putaway("+status+")");		
			// 修改积分礼品状态
			resultMessage = giftService.updateStateById(ID, status);		
			logger.info("method:onlineStatus return:resultMessage(" + resultMessage	+ ")");	
		}
		renderJson("msg",resultMessage);
	}
}
